/**
 * Rodimiro Andrés Castañeda Calderón (12122)
 * Mario Roberto Gómez Flores (12165)
 * Sección 10
 * 22/07/2013
 * PilaMario.java
 * La pila que implementa iPila, hecha por Mario Gómez
 */

import java.util.Vector;
import java.util.EmptyStackException;

public class PilaMario<T> implements iPila<T>{
    //atributos
    Vector<T> pila;
    int num_elementos;

    /**
     * Constructor de una pila vacia
     */
    public PilaMario(){
        //Construye un nuevo Vector
        //Su capacidad inicial es 0 y el aumento predeterminado, 1.
        pila = new Vector<>(0, 1);
        num_elementos = 0;
    }

    /**
     * Agrega un objeto tipo T a la pila.
     * @param t
     * Objeto a agregar.
     * <dt><b> Postcondition: </b><dd>
     * La pila tiene un elemento más.
     */
    public void push(T t){
        //Llama al metodo addElement de vector para agregar o al final de la lista
        pila.addElement(t);

        //Cuenta el nuevo objeto
        num_elementos++;
    }

    /**
     * Remueve el último objeto tipo T que fue ingresado a la pila.
     * @return El objeto que fue eliminado.
     * <dt><b> Precondition: </b><dd>
     * La pila no está vacía.
     * <dt><b> Postcondition </b><dd>
     * Se remueve un elemento
     */
    public T pop(){
        if(hasItems()){
            //Almacena el ultimo elemento
            T ultimo = pila.lastElement();

            //Remueve el ultimo elemento
            pila.remove(pila.size()-1);

            //Quita de la cuenta el elemento
            num_elementos--;

            //Devuelve el ultimo objeto de la lista
            return ultimo;
        }
        else{
            throw new PilaVaciaException("A la pila ya no le quedan elementos.");
        }
    }

    /**
     * Para saber si la pila tiene elementos
     * @return
     * true ssi la pila no está vacía
     */
    public boolean hasItems(){
        return (num_elementos > 0);
    }
}
